使用指令
如果我们的目的就是将Parser函数简化到正好是原来那个版本,那又该怎么做呢?对于一个大程序而言,如果需要将它从以前模块化程度较低的版本转为使用名字空间的话,这也是一个很合理的想法。
一个使用指令能把来自一个名字空间的所有名字都变成可用的,几乎像它们原来就声明在其名字空间之外一样(8.2.8节)。例如,
namespace Parser {
double prim(bool);
double term(bool);
double expr(bool);
using namespace Lexer; // 使来自Lexer的所有名字都可以用
using namespace Error; // 使来自Error的所有名字都可以用
}
这就使我们可以完全按照原来的方式写Parser的函数(6.1.1节):
double Parser::term(bool get) // 乘和除
{
double left = prim(get);
for(;;)
switch(curr_tok) { // Lexer的curr_tok
case MUL: // Lexer的MUL
left *= prim(true);
break;
case DIV: // Lexer的DIV
if(double d = prim(true)) {
left /= d;
break;
}
return error("divide by 0"); // Error的error
default:
return left;
}
}
全局性的使用指令是一种完成转变的工具(8.2.9节),在其他方面最好避免使用。在一个名字空间里的使用指令是一种名字空间的组合工具(8.2.8节)。在一个函数里(也只在这种地方),可以安全地将使用指令作为一种方便的记法方式(8.3.3.1节)。
🔚